#pragma once

#include "IXDraw.h"
#include "SkinDataDef.h"


/**
 *  IXImageDraw Interface.
 *
 */
class ExportXSkinLib IXImageDraw : public IXDraw
{
    DEF_INTERFACE(IXImageDraw, _T("{82322273-9144-40f9-8087-67B36E71C81F}"));
public:

    virtual HRESULT STDMETHODCALLTYPE   put_ImagePath(IN LPCTSTR szXNC) = 0;
    virtual HRESULT STDMETHODCALLTYPE   put_Icon(IN LPCTSTR szXNC, BOOL bBig) = 0;
    virtual HRESULT STDMETHODCALLTYPE   put_Icon(IN XICON xIcon, IN BOOL bDestroy) = 0;

    virtual HRESULT STDMETHODCALLTYPE   get_ImagePath(OUT BSTR* pbstrXNC) = 0;

    virtual HRESULT STDMETHODCALLTYPE   put_Image(IN XIMAGE xImage) = 0;

    virtual void    STDMETHODCALLTYPE   put_DrawType(IN ImageDrawType type) = 0;

    virtual HRESULT STDMETHODCALLTYPE   put_DrawParams(IN ImageDrawParams* pParam) = 0;
    virtual HRESULT STDMETHODCALLTYPE   get_DrawParams(OUT ImageDrawParams* pParam) = 0;

    virtual HRESULT STDMETHODCALLTYPE   get_ImageSize(OUT LPSIZE lpSize) = 0;

    virtual HRESULT STDMETHODCALLTYPE   put_Index(IN INT nHIndex, IN INT nVIndex) = 0;
    virtual HRESULT STDMETHODCALLTYPE   get_Index(IN LPINT pnHIndex, IN LPINT pnVIndex) = 0;

    virtual HRESULT STDMETHODCALLTYPE   put_SubCount(IN INT nHCount, IN INT nVCount) = 0;
    virtual HRESULT STDMETHODCALLTYPE   get_SubCount(IN LPINT pnHCount, IN LPINT pnVCount) = 0;

    virtual HRESULT STDMETHODCALLTYPE   put_AlphaMode(IN eImageAlphaMode nAlphaMode) = 0;
    virtual HRESULT STDMETHODCALLTYPE   get_AlphaMode(OUT eImageAlphaMode* pnAlphaMode) = 0;

    virtual HRESULT STDMETHODCALLTYPE   put_AlphaValue(IN BYTE byAlphaValue) = 0;
    virtual HRESULT STDMETHODCALLTYPE   get_AlphaValue(OUT LPBYTE pbyAlphaValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE   put_TransparentColor(IN COLORREF clrTrans) = 0;
    virtual HRESULT STDMETHODCALLTYPE   get_TransparentColor(OUT LPCOLORREF pclrTrans) = 0;

    virtual HANDLE  STDMETHODCALLTYPE   GetDrawBuffer(IN SIZE* pSize) = 0;
    virtual void    STDMETHODCALLTYPE   ReleaseDrawBuffer(IN HANDLE hBuffer) = 0;
    virtual HRESULT STDMETHODCALLTYPE   DrawBuffer(IN XCANVAS xCanvas, IN HANDLE hBuffer, IN const RECT* lpDes) = 0;
};
